import { defineConfig, loadEnv } from 'vite'
// 提供vue3单文件支持
import vue from '@vitejs/plugin-vue'
import { resolve } from 'path'
// 使用gzip或者brotli来压缩
import viteCompression from 'vite-plugin-compression'

const viteConfig = defineConfig(({ mode }) => {
    const env = loadEnv(mode, process.cwd())
    return {
        plugins: [
            vue(),
            // gzip压缩，生产环境生成.gz文件
            viteCompression({
                // 输出压缩过程中详细信息
                verbose: true,
                // 是否禁用压缩功能
                disable: false,
                // 只压缩大于此大小的文件，默认为10k，即10240字节
                threshold: 10240,
                // 选择什么压缩算法，可以选择gzip或brotliCompress
                algorithm: 'gzip',
                // 是否删除原始未压缩的文件，默认为false，即保留原始文件
                deleteOriginFile: false,
                // 配置压缩后文件扩展名
                ext: '.gz',
            }),
        ],
        base: env.VITE_PUBLIC_PATH,
        resolve: {
            alias: {
                '@': resolve(__dirname, 'src'),
            },
        },
        define: {
            __APP_VERSION__: JSON.stringify(process.env.npm_package_version),
        },
        css: {
            // 指定传递给css预处理起的选项
            preprocessorOptions: {
                // scss预处理
                scss: {
                    additionalData: `@import "@/styles/index.scss";`,
                },
            },
        },
        build: {
            minify: 'terser', // 使用 Terser 进行压缩
            terserOptions: {
                compress: {
                    // 生产环境去除 console debugger
                    drop_console: true,
                    drop_debugger: true,
                },
            },
        },
        // 启动服务配置
        server: {
            // 指定服务器应该监听哪个IP地址，如果将此设置为0.0.0.0或者true，将监听所有地址，包括局域网和公网地址
            host: '0.0.0.0',
            // 指定开发服务器端口
            port: 3000,
            // 开发服务器启动时，自动在浏览器中打开应用程序
            open: true,
            // 是否开启HTTPS
            https: false,
            proxy: {
                '/api_v1': {
                    target: `http://localhost:9102`,
                    changeOrigin: true,
                    ws: true,
                    rewrite: (path: string) => {
                        return path.replace(/\/api_v1/, '')
                    },
                },
            },
        },
    }
})

export default viteConfig
